프로세스와 쓰레드
JeongSeulho
2025년 01월 03일
준비중...
클립보드로 복사
프로세스의 메모리 구조
- 코드 영역 : 실행할 프로그램의 코드가 저장
- 데이터 영역 : 전역 변수, 정적 변수
- 힙 영역 : 런타임에 필요시 동적으로 할당되는 부분
- 스택 영역 : 함수 관련한 정보(지역변수, 매개변수, 리턴값, 함수 종료 후 돌아갈 주소)
멀티 프로그래밍과 멀티 프로세싱
- 멀티 프로그래밍 : 메모리에 여러 프로세스를 동시에 올림
- 멀티 프로세싱 : CPU가 시분할하여 여러 프로세스를 동시에 실행
PCB(Process Control Block)
- 프로세스의 정보를 저장하는 블록(운영체제 입장에서의 프로세스 그 자체)
- 프로세스 생성시 PCB 생성, 프로세스 종료 시 PCB 제거
- 각 PCB는 연결리스트 구조로 커널의 메모리에 저장되어 있음(커널만 사용가능한 특수한 메모리 공간)
프로세스 상태
- PCB에 저장되는 프로세스 상태
- CPU의 시분할 처리를 위한 정보
- 상태 종류
- new : 메모리에 프로그램 적재를 요청
- ready : 승인 이후 CPU 할당을 기다리는 상태
- ready => running으로 넘어가기 위한 다양한 우선순위 및 방법들이 CPU 스케줄링
- running : CPU를 할당받아 실행 중인 상태, 부여된 시간만큼 실행, 시간 이후 ready 상태로 전환
- waiting : 입출력 등의 이벤트 발생을 기다리는 상태
- terminated : 프로세스 실행 종료
컨텍스트 스위칭
- 실행할 프로세스를 전환하는 작업
- 기존에 작업하던 프로세스의 내용(CPU의 레지스터 값 등)을 PCB에 저장하고, 다음 프로세스의 내용을 PCB에서 읽어 CPU 레지스터에 저장하며 전환
부모, 자식 프로세스
- 여러 프로세스는 기본적으로 트리구조를 가짐
- 부팅시 생성되는 최초의 프로세스가 존재(system, init 등 OS마다 다름)
- 이후 생성되는 프로세스는 이미 존재하는 프로세스를 복사하여 일부 변경함, 이때 부모-자식 관계가 생성
- 자식 프로세스는 종료시 부모 프로세스에게 종료를 알림(부모 프로세스가 먼저 죽어 자식 프로세스가 남아 있는 경우 좀비 프로세스가 됨)
쓰레드
- 너무 많은 프로세스 생성으로 인한 오버헤드를 줄이기 위해 등장
- 메모리 공간
- 컨텍스트 스위칭
- 프로세스간 통신(IPC)
- 쓰레드는 한 프로세스의 PCB, 코드, 데이터, 힙 영역을 공유하며 스택 영역만 따로 가짐
- 데이터를 공유하므로 안정성은 떨어짐
- 각 쓰레드의 TCB(Thread Control Block)가 존재